
#include "case.h"

Case * creerCase(const int nbJ)
{
    Case * C = (Case*)malloc(1 * sizeof(Case));
    initCase(C,nbJ);
    return C;
}

void initCase (Case * uneCase, const int nbJoueur)
{
    uneCase->type = 3;
    uneCase->position = 0;
    uneCase->action = NULL;
    uneCase->valide = (bool*)malloc(nbJoueur*sizeof(bool));
    int i;
    for(i=0;i<nbJoueur;i++)
        uneCase->valide[i]= false;
}

void libereCase(Case * uneCase)
{
    if(uneCase->type == 0)
	{
        detruireQuest(&uneCase->action);
		/*libereQuest(uneCase->action);*/
	}
    uneCase->type = 0;
    uneCase->position = 0;
    uneCase->action = NULL;
    free(uneCase->valide);
}

void detruireCase(Case ** C)
{
    libereCase(*C);
    free(*C);
    *C = NULL;
}


void setTypeCase (Case * uneCase, const GenreCase type)
{
    uneCase->type = type;
}
void setPositionCase (Case * uneCase, const int position)
{
    uneCase->position = position;
}
void setActionCase(Case * uneCase, const Question * quest)
{
    assert(uneCase->type == exam);
    uneCase->action = creerQuestion();
    copierQuest(uneCase->action,quest);
}

void setValideCase(Case * uneCase, const int joueur, const bool res)
{
    uneCase->valide[joueur] = res;
}


GenreCase getTypeCase (const Case * uneCase)
{
    return uneCase->type;
}
int getPositionCase (const Case * uneCase)
{
    return uneCase->position;
}
Question * getActionCase(const Case * uneCase)
{
    return uneCase->action;
}
bool getValideCase (const Case * uneCase, const int joueur)
{
    return uneCase->valide[joueur];
}


void caseTestRegression()
{
    printf("** Test De Regression : Case **\n");
    GenreCase genre = 0;
    int pos = 12;
    int nbJou = 4;
    int numJou = 1;
    char * ligne = "Question";

    Case * uneCase = creerCase(nbJou);
    Question * Q1 = creerQuestion();
    setQuest(Q1,ligne);
	setRepQuest(Q1,ligne);
	setRepQuest(Q1,ligne);
	setRepQuest(Q1,ligne);
	setRepQuest(Q1,ligne);

    Question * Q2;

    assert(uneCase->type == 3);

    printf("* Appel à setTypeCase...");
    setTypeCase(uneCase,genre);
    printf(" okay *\n");

    printf("* Appel à setPositionCase...");
    setPositionCase(uneCase, pos);
    printf(" okay *\n");

    printf("* Appel à setActionCase...");
    setActionCase(uneCase,Q1);
    printf(" okay *\n");

    printf("* Appel à setValideCase...");
    assert(numJou<nbJou);
    setValideCase(uneCase, numJou, true);
    printf(" okay *\n");

    Q2 = getActionCase(uneCase);

    printf(" -> Le type de la case est %d \n", getTypeCase(uneCase));
    printf(" -> La position de la case est %d \n", getPositionCase(uneCase));
    printf(" -> L'action de la case est %s \n", Q2->Quest);
    printf(" -> La case est elle validée? %d \n", getValideCase(uneCase, 1));

    detruireQuest(&Q1);
    detruireCase(&uneCase);
    printf("** Fin Test De Regression : okay!! **\n\n");

}
